<?php

namespace addons\payment\library;

use app\admin\model\payment\Channel;
use app\admin\model\payment\Order;
use Symfony\Component\HttpFoundation\Response;
/**
 * 支付服务类
 */
interface ServiceInterface
{
    /**
     * 是否能够支付
     *
     * @param Order $order
     * @return boolean
     */
    public function canpay(Order $order);

    /**
     * 渲染配置视图
     *
     * @param Model $channel 渠道实例
     * @return \think\response\View
     */
    public function configview(Channel $channel);

    /**
     * 网站支付
     * @param Order $order 订单实例
     * @param array $params 参数
     * @return Response
     */
    public function payWeb(Order $order, $params = []);

    /**
     * 手机网站支付
     *
     * @param Order $order
     * @param array $params
     * @return Response
     */
    public function payWap(Order $order, $params = []);

    /**
     * app支付
     *
     * @param Order $order
     * @param array $params
     * @return string app支付字符串
     */
    public function payApp(Order $order, $params = []);

    /**
     * 扫码
     *
     * @param Order $order
     * @param array $params
     * @return string 二维码内容
     */
    public function payScan(Order $order, $params = []);

    /**
     * 转账
     *
     * @param Order $order
     * @param array $params
     * @return Collection
     */
    public function payTransfer(Order $order, $params = []);

    /**
     * 小程序
     *
     * @param Order $order
     * @param array $params
     * @return Collection
     */
    public function payMini(Order $order, $params = []);

    /**
     * 回调处理
     *
     * @param array $data 回调数据
     * @param Channel $channel 渠道
     * @return boolean|array|string|object  boolean=转换成整型 array=json string=return object=reutrn
     */
    public function back($data, Channel $channel);

    /**
     * 返回错误信息
     *
     * @return string
     */
    public function getError();
}
